package com.gtw.pattern;

/**
 * 优点:
 *      1.只有一个实例,减少内存开支
 *      2.当一个对象产生需要比较多资源时,只生成一个实例,减少系统系能开销,避免对资源多重占用
 * 缺点:
 *      1.没有接口,不利于扩展
 *      2.不利于测试,单例没有完成是不能进行测试的,没有接口,也不能使用mock创建虚拟对象
 * 使用场景:
 *      1.生成唯一对象
 *      2.共享数据对象
 *      3.创建一个对象消耗资源过多
 *      4.需要定义大量静态常量和方法(如工具类)
 * 最佳实践:
 *      Spring中每个Bean默认是单例的,Spring容器可以管理这些Bean的生命周期
 */
public class Singleton {
    private static final Singleton SINGLETON = new Singleton();

    /**
     * 限制产生多个对象
     */
    private Singleton() {
    }

    /**
     * 获取该对象的实例
     */
    public static synchronized Singleton getInstance(){
        return SINGLETON;
    }

    public void doSomething(){
        System.out.println("做点什么。。。");
    }
}
